<?php

namespace XWAM\Addon\PXCallSystem\Model;

/**
 * 数据表创建模型
 * 一般用于动态表或临时表的创建
 * 
 * @author SoChishun <14507247@qq.com>
 * @version 1.0
 * @since 1.0.0 <2015-4-1> SoChishun Added.
 */
class DbTableModel extends AppbaseModel {

    // 禁止字段检测
    protected $autoCheckFields = false;

    /**
     * 数据表集合
     * @var array
     */
    protected $tables = array(
        'CDR' => "(id int auto_increment primary key,`calldate` datetime not null default '0000-00-00 00:00:00',`clid` varchar(80) not null default '',`src` varchar(80) not null default '',`dst` varchar(80) not null default '',`dcontext` varchar(80) not null default '',`channel` varchar(80) not null default '',`dstchannel` varchar(80) not null default '',`lastapp` varchar(80) not null default '',`lastdata` varchar(80) not null default '',`start` datetime not null,`answer` datetime not null,xcallAnswer datetime not null,`end` datetime not null,`duration` int(11) not null default '0',`billsec` int(11) not null default '0',`disposition` varchar(45) not null default '',`amaflags` int(11) not null default '0',`accountcode` varchar(128) not null default '',`uniqueid` varchar(32) not null default '',`userfield` varchar(255) not null default '',`did` varchar(50) not null default '',`recordingfile` varchar(255) not null default '',`cnum` varchar(40) not null default '',`cnam` varchar(40) not null default '',`outbound_cnum` varchar(40) not null default '',   `outbound_cnam` varchar(40) not null default '',`dst_cnam` varchar(40) not null default '',taskID bigint not null,taskStrategyID int not null,callerNo varchar(16),calledNo varchar(16),extension varchar(16),hungupTime datetime,seatdtmf varchar(255),dtmf varchar(255),ecdtmf varchar(255),amount decimal(12,4) not null default 0.0000,direction smallint not null default 0,siteID int,KEY `calldate` (`calldate`),KEY `dst` (`dst`),KEY `accountcode` (`accountcode`),INDEX idxu_extension (extension,dst))",
        'CALL_NUMBER' => "(id int auto_increment primary key comment '主键编号',taskID int not null comment '外呼任务编号',trunkName varchar(32) not null comment '中继名称',taskStrategyID int not null comment '外呼任务策略编号',phoneNumber varchar(32) not null comment '呼叫号码',customerName varchar(32) not null default '' comment '客户姓名',sex varchar(16) not null default '' comment '性别',idNo varchar(32) not null default '' comment '身份证号码',card_no varchar(64) NOT NULL DEFAULT '' COMMENT '卡号',address varchar(255) not null default '' comment '地址',info1 varchar(64) not null default '' comment '备用1',info2 varchar(64) not null default '' comment '备用2',detailMsg varchar(5120) not null default '' comment '其他信息',`source` varchar(8) not null comment '号码来源(add=添加,import=导入,generate=生成)',sourceID int not null default 0 comment '来源表的主键编号(如tcti_call_number0.id)',direction smallint not null default 0 comment '呼叫方向(1=接入(策略外呼后转分机)[呼入费率组],2=呼出(策略外呼)[呼出费率组],3=网内(分机互打),4=来话(系统被叫来话),5=外呼(分机直接呼出)[呼出费率组],6=签入(分机签入队列),7=签出(分机签出队列))',`state` smallint not null default 0 comment '号码状态((0=空闲,1=正在发起呼叫,2=呼叫失败,3=呼叫成功))',siteID int comment '公司编号(公司管理员的uid)',INDEX idx_phoneNumber (phoneNumber),INDEX idxu_taskID (taskID,taskStrategyID))",
    );

    /**
     * 创建数据表
     * @param string $key 模板键名
     * @param string $table_name 数据表名称
     * @param array $options 选项
     * @return array
     * @since 1.0 <2015-4-1> SoChishun Added.
     */
    public function create_table($key, $table_name, $options = array()) {
        if (!$key || !isset($this->tables[$key])) {
            return $this->returnMsg(false, '参数有误或模板不存在');
        }
        $config = array(
            'ENGINEE' => 'MyISAM', // 引擎InnoDB/MyISAM/Memory
            'CHARSET' => 'utf8', // 字符集
            'DROPTABLE' => false, // 是否drop已存在的表
        );
        $config = array_merge($config, $options);
        if ($config['DROPTABLE']) {
            $result = $this->execute('drop table if exists ' . $table_name);
            if (false === $result) {
                return $this->returnMsg($result);
            }
        }
        $result = $this->execute("create table if not exists " . $table_name . ' ' . $this->tables[$key] . ' ENGINE=' . $config['ENGINEE'] . ' DEFAULT CHARSET=' . $config['CHARSET'] . ';');
        return $this->returnMsg($result);
    }

}
